/* 
    做法：
        1. 确认要提炼的表达式没有副作用；
        2. 声明一个不可修改的变量，把你想要提炼的表达式复制一份，用其结果为这个变量赋值；
        3. 用这个新变量取代原来的表达式；
        4. 测试。
    
    范例： 在一个类中
*/

class Order {
    constructor(aRecord) {
        this.aRecord = aRecord;
    }

    getQuantity() {
        return this._data.quantity;
    }

    getPrice() {
        return this.quantity * this.itemPrice -
            Math.max(0, this.quantity - 500) * this.itemPrice * 0.05 +
            Math.min(this.quantity * this.itemPrice * 0.1, 100);
    }
}

/**************************************************************** */

class Order {
    constructor(aRecord) {
        this.aRecord = aRecord;
    }

    getQuantity() {
        return this._data.quantity;
    }

    getPrice() {
        return this.getBasePrice() - this.getQuantityDiscount() + this.getShipping();
    }

    getBasePrice() {
        return this.quantity * this.itemPrice
    }

    getQuantityDiscount() {
        return Math.max(0, this.quantity - 500) * this.itemPrice * 0.05;
    }

    getShipping() {
        return Math.min(basePrice * 0.1, 100);
    }
}
